home *** CD-ROM | disk | FTP | other *** search
- // ==================================================
- // UFileInfo.cp
- // Copyright (C) 1994-96 Mizutori Tetsuya, March 9 1994, July 4 1996.
- // ==================================================
- // All documents are pretty-printed in Geneva 10-point font.
-
- #include <Files.h>
-
- #include <UMemoryMgr.h>
- #include <UDebugging.h>
-
- #include "UFileInfo.h"
- #include "UErrorMessage.h"
-
-
- // --------------------------------------------------
- // ・ GetSpecType
- // --------------------------------------------------
-
- EFileSpecType
- UFileInfo::GetSpecType(
- FSSpec & inFSSpec )
- {
- CInfoPBRec pb;
- EFileSpecType theSpecType;
- OSErr err;
-
- if ( (inFSSpec.parID) == fsRtParID )
- theSpecType = fileType_Volume;
- else {
- pb.hFileInfo.ioNamePtr = inFSSpec.name;
- pb.hFileInfo.ioVRefNum = inFSSpec.vRefNum;
- pb.hFileInfo.ioDirID = inFSSpec.parID;
- pb.hFileInfo.ioFDirIndex = 0;
-
- err = ::PBGetCatInfoSync( &pb );
- UErrorMessage::NofityIfOSErr(err,false);
-
- if ( err == noErr ) {
- if ( (pb.hFileInfo.ioFlAttrib & 0x10) != 0 )
- theSpecType = fileType_Folder;
- else
- theSpecType = fileType_File;
- }
- }
-
- return theSpecType;
- }
-
-
- // --------------------------------------------------
- // ・ TouchDir
- // --------------------------------------------------
-
- OSErr
- UFileInfo::TouchDir(
- const short vRefNum,
- const long dirID )
- {
- CInfoPBRec pb;
- Str255 theFilename;
- OSErr err;
-
- pb.dirInfo.ioDrDirID = dirID;
- pb.dirInfo.ioVRefNum = vRefNum;
- pb.dirInfo.ioNamePtr = theFilename;
- pb.dirInfo.ioFDirIndex = -1;
-
- err = ::PBGetCatInfoSync( &pb );
- UErrorMessage::NofityIfOSErr(err,false);
-
- if ( err == noErr ) {
- pb.dirInfo.ioCompletion = 0;
- pb.dirInfo.ioDrDirID = pb.dirInfo.ioDrParID;
- pb.dirInfo.ioFDirIndex = 0;
- ::GetDateTime( &pb.dirInfo.ioDrMdDat );
-
- err = ::PBSetCatInfoSync( &pb );
- UErrorMessage::NofityIfOSErr(err,false);
- }
-
- return err;
- }
-
-
- // --------------------------------------------------
- // ・ GetFSSpecDateTime
- // --------------------------------------------------
-
- OSErr
- UFileInfo::GetFSSpecDateTime(
- FSSpec & inFSSpec,
- unsigned long & outCreationDate,
- unsigned long & outModificationDate )
- {
- OSErr err;
-
- if ( GetSpecType( inFSSpec ) == fileType_File ) {
- err = GetFileDateTime( inFSSpec, outCreationDate, outModificationDate );
- } else {
- err = GetFolderDateTime( inFSSpec, outCreationDate, outModificationDate );
- }
-
- return err;
- }
-
-
- // --------------------------------------------------
- // ・ SetFSSpecDateTime
- // --------------------------------------------------
-
- OSErr
- UFileInfo::SetFSSpecDateTime(
- FSSpec & inFSSpec,
- unsigned long inCreationDate,
- unsigned long inModificationDate )
- {
- OSErr err;
-
- if ( GetSpecType( inFSSpec ) == fileType_File ) {
- err = SetFileDateTime( inFSSpec, inCreationDate, inModificationDate );
- } else {
- err = SetFolderDateTime( inFSSpec, inCreationDate, inModificationDate );
- }
-
- TouchDir( inFSSpec.vRefNum, inFSSpec.parID );
- ::FlushVol( nil, inFSSpec.vRefNum );
-
- return err;
- }
-
-
- // --------------------------------------------------
- // ・ GetFileDateTime
- // --------------------------------------------------
-
- OSErr
- UFileInfo::GetFileDateTime(
- FSSpec & inFSSpec,
- unsigned long & outCreationDate,
- unsigned long & outModificationDate )
- {
- CInfoPBRec pb;
- HFileInfo* theFInfo = (HFileInfo *) &pb;
- OSErr err;
-
- theFInfo->ioNamePtr = inFSSpec.name;
- theFInfo->ioVRefNum = inFSSpec.vRefNum;
- theFInfo->ioDirID = inFSSpec.parID;
- theFInfo->ioFDirIndex = 0;
-
- err = ::PBGetCatInfoSync( (CInfoPBPtr) theFInfo );
- UErrorMessage::NofityIfOSErr(err,false);
-
- outCreationDate = theFInfo->ioFlCrDat;
- outModificationDate = theFInfo->ioFlMdDat;
-
- return err;
- }
-
-
- // --------------------------------------------------
- // ・ SetFileDateTime
- // --------------------------------------------------
-
- OSErr
- UFileInfo::SetFileDateTime(
- FSSpec & inFSSpec,
- unsigned long inCreationDate,
- unsigned long inModificationDate )
- {
- CInfoPBRec pb;
- HFileInfo* theFInfo = (HFileInfo *) &pb;
- OSErr err;
-
- theFInfo->ioNamePtr = inFSSpec.name;
- theFInfo->ioVRefNum = inFSSpec.vRefNum;
- theFInfo->ioDirID = inFSSpec.parID;
- theFInfo->ioFDirIndex = 0;
-
- err = ::PBGetCatInfoSync( (CInfoPBPtr) theFInfo );
- UErrorMessage::NofityIfOSErr(err,false);
-
- theFInfo->ioNamePtr = inFSSpec.name;
- theFInfo->ioVRefNum = inFSSpec.vRefNum;
- theFInfo->ioDirID = inFSSpec.parID;
- if ( inCreationDate != 0 ) theFInfo->ioFlCrDat = inCreationDate;
- if ( inModificationDate != 0 ) theFInfo->ioFlMdDat = inModificationDate;
-
- err = ::PBSetCatInfoSync( (CInfoPBPtr) theFInfo );
- UErrorMessage::NofityIfOSErr(err,false);
-
- //TouchDir( inFSSpec.vRefNum, inFSSpec.parID );
- //::PBFlushFileSync( (ParmBlkPtr) theFInfo );
-
- return err;
- }
-
-
- // --------------------------------------------------
- // ・ GetFolderDateTime
- // --------------------------------------------------
-
- OSErr
- UFileInfo::GetFolderDateTime(
- FSSpec & inFSSpec,
- unsigned long & outCreationDate,
- unsigned long & outModificationDate )
- {
- CInfoPBRec pb;
- DirInfo* theVInfo = (DirInfo *) &pb;
- OSErr err;
-
- theVInfo->ioNamePtr = inFSSpec.name;
- theVInfo->ioVRefNum = inFSSpec.vRefNum;
- theVInfo->ioDrDirID = inFSSpec.parID;
- theVInfo->ioFDirIndex = 0;
-
- err = ::PBGetCatInfoSync( (CInfoPBPtr) theVInfo );
- UErrorMessage::NofityIfOSErr(err,false);
-
- outCreationDate = theVInfo->ioDrCrDat;
- outModificationDate = theVInfo->ioDrMdDat;
-
- return err;
- }
-
-
- // --------------------------------------------------
- // ・ SetFolderDateTime
- // --------------------------------------------------
-
- OSErr
- UFileInfo::SetFolderDateTime(
- FSSpec & inFSSpec,
- unsigned long inCreationDate,
- unsigned long inModificationDate )
- {
- CInfoPBRec pb;
- DirInfo* theVInfo = (DirInfo *) &pb;
- OSErr err;
-
- theVInfo->ioNamePtr = inFSSpec.name;
- theVInfo->ioVRefNum = inFSSpec.vRefNum;
- theVInfo->ioDrDirID = inFSSpec.parID;
- theVInfo->ioFDirIndex = 0;
-
- err = ::PBGetCatInfoSync( (CInfoPBPtr) theVInfo );
- UErrorMessage::NofityIfOSErr(err,false);
-
- theVInfo->ioNamePtr = inFSSpec.name;
- theVInfo->ioVRefNum = inFSSpec.vRefNum;
- theVInfo->ioDrDirID = inFSSpec.parID;
- if ( inCreationDate != 0 ) theVInfo->ioDrCrDat = inCreationDate;
- if ( inModificationDate != 0 ) theVInfo->ioDrMdDat = inModificationDate;
-
- err = ::PBSetCatInfoSync( (CInfoPBPtr) theVInfo );
- UErrorMessage::NofityIfOSErr(err,false);
-
- //TouchDir( inFSSpec.vRefNum, inFSSpec.parID );
- //::PBFlushVolSync( (ParmBlkPtr) theVInfo );
-
- return err;
- }
-
- // end of program
-